import express from 'express';
import { checkSchema, validationResult } from 'express-validator'  
import util from 'utility'
import jwt from 'jsonwebtoken';  

const router = express.Router();

// 生成JWT令牌  
function generateToken(user) {  
    const secretKey = 'qfdixon'; // 替换为你的密钥  
    return jwt.sign({ user }, secretKey, { expiresIn: '48h' });  
}  


// 发送验证码

router.post('/sendCode',checkSchema({ 
    phone: { notEmpty: true, errorMessage:'手机号码不能为空'},
 }), async (req,res)=>{
    res.validator();  // 对于请求参数进行校验

    const { phone } = req.body;

    // 先判断缓存当中是否有未到期的验证码
    const code = req.nodeCache.get(`${phone}`);
    if(code){
        return res.fail(`验证码已经发送_${code}`)
    }

    // 生成随机的验证码
    const rndNum = util.randomString(4,'1234567890');
    // 使用缓存保存这个验证码 以便校验的时候使用
    req.nodeCache.set(`${phone}`, rndNum ,300);
    res.success(`发送成功_${rndNum}`);

 })

// 用户注册

router.post('/reg', checkSchema({
    phone:{ notEmpty: true, errorMessage: '手机号码不能为空' },
    code:{ notEmpty: true, errorMessage:'验证码不能为空' }
}), async(req,res)=>{
    res.validator();  // 对于请求参数进行校验
    
    const { phone,code , money} = req.body;
  
    // 验证 code是否正确
    const _code = req.nodeCache.get(`${phone}`);
    if(code != _code) return res.fail('验证码不正确');

    await req.prisma.user.create({
        data:{
            phone,
            status: 'enable',
            money
        }
    })
    // 从缓存当中删掉这个验证码

    req.nodeCache.del(`${phone}`)
    res.success('注册成功')

})


// 登录业务
router.post('/login', checkSchema({ 
    phone:{ notEmpty: true, errorMessage: '手机号码不能为空' },
    code:{ notEmpty: true, errorMessage:'验证码不能为空' }
}) ,async (req,res)=>{
    res.validator();  // 对于请求参数进行校验

     const { code , phone } = req.body;

      // 验证 code是否正确
      const _code = req.nodeCache.get(`${phone}`);
      if(code != _code) return res.fail('验证码不正确');

      const user = await req.prisma.user.findUnique({
        where:{
            phone
        },
        select: {
            id: true,
        }
      })
      
      if(!user) return res.fail('当前用户并没有注册');

      const token = generateToken(user)
      
      res.success({ token } )
  

})








export default router;